home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / omegrace.c < prev    next >
C/C++ Source or Header  |  2000-05-13  |  15KB  |  543 lines

  1. /***************************************************************************
  2.  
  3.  
  4. This driver is dedicated to my loving wife Natalia Wiebelt
  5.                                       and my daughter Lara Anna Maria
  6. Summer 1997 Bernd Wiebelt
  7.  
  8. Many thanks to Al Kossow for the original sources and the solid documentation.
  9. Without him, I could never had completed this driver.
  10.  
  11.  
  12. --------
  13.  
  14. Most of the info here comes from the wiretap archive at:
  15. http://www.spies.com/arcade/simulation/gameHardware/
  16.  
  17.  
  18. Omega Race Memory Map
  19. Version 1.1 (Jul 24,1997)
  20. ---------------------
  21.  
  22. 0000 - 3fff    PROM
  23. 4000 - 4bff    RAM (3k)
  24. 5c00 - 5cff    NVRAM (256 x 4bits)
  25. 8000 - 8fff    Vec RAM (4k)
  26. 9000 - 9fff    Vec ROM (4k)
  27.  
  28. 15 14 13 12 11 10
  29. --+--+--+--+--+--
  30. 0  0  0  0                       M8 - 2732  (4k)
  31. 0  0  0  1                       L8 - 2732
  32. 0  0  1  0                       K8 - 2732
  33. 0  0  1  1                       J8 - 2732
  34.  
  35. 0  1  -  0  0  0                 RAM (3k)
  36. 0  1  -  0  0  1
  37. 0  1  -  0  1  0
  38.  
  39. 0  1  -  1  1  1                 4 Bit BB RAM (d0-d3)
  40.  
  41. 1  -  -  0  0                    Vec RAM (4k)
  42. 1  -  -  0  1
  43. 1  -  -  1  0             Vec ROM (2k) E1
  44. 1  -  -  1  1                    Vec ROM (2k) F1
  45.  
  46. I/O Ports
  47.  
  48. 8    Start/ (VG start)
  49. 9    WDOG/  (Reset watchdog)
  50. A    SEQRES/ (VG stop/reset?)
  51. B    RDSTOP/ d7 = stop (VG running if 0)
  52.  
  53. 10 I    DIP SW C4 (game ship settings)
  54.  
  55.     6 5  4 3  2 1
  56.                       1st bonus ship at
  57.         | |  | |  0 0  40,000
  58.         | |  | |  0 1  50,000
  59.         | |  | |  1 0  70,000
  60.         | |  | |  1 1 100,000
  61.         | |  | |      2nd and  3rd bonus ships
  62.         | |  0 0      150,000   250,000
  63.         | |  0 1      250,000   500,000
  64.         | |  1 0      500,000   750,000
  65.         | |  1 1      750,000 1,500,000
  66.         | |           ships per credit
  67.         0 0           1 credit = 2 ships / 2 credits = 4 ships
  68.         0 1           1 credit = 2 ships / 2 credits = 5 ships
  69.         1 0           1 credit = 3 ships / 2 credits = 6 ships
  70.         1 1           1 credit = 3 ships / 2 credits = 7 ships
  71.  
  72. 11 I    7 = Test
  73.     6 = P1 Fire
  74.     5 = P1 Thrust
  75.     4 = Tilt
  76.  
  77.     1 = Coin 2
  78.     0 = Coin 1
  79.  
  80. 12 I    7 = 1P1CR
  81.     6 = 1P2CR
  82.  
  83.     3 = 2P2CR -+
  84.     2 = 2P1CR  |
  85.     1 = P2Fire |
  86.     0 = P2Thr -+ cocktail only
  87.  
  88. 13 O   7 =
  89.         6 = screen reverse
  90.         5 = 2 player 2 credit start LED
  91.         4 = 2 player 1 credit start LED
  92.         3 = 1 player 1 credit start LED
  93.         2 = 1 player 1 credit start LED
  94.         1 = coin meter 2
  95.         0 = coin meter 1
  96.  
  97. 14 O    sound command (interrupts sound Z80)
  98.  
  99. 15 I    encoder 1 (d7-d2)
  100.  
  101.     The encoder is a 64 position Grey Code encoder, or a
  102.     pot and A to D converter.
  103.  
  104.     Unlike the quadrature inputs on Atari and Sega games,
  105.         Omega Race's controller is an absolute angle.
  106.  
  107.     0x00, 0x04, 0x14, 0x10, 0x18, 0x1c, 0x5c, 0x58,
  108.     0x50, 0x54, 0x44, 0x40, 0x48, 0x4c, 0x6c, 0x68,
  109.     0x60, 0x64, 0x74, 0x70, 0x78, 0x7c, 0xfc, 0xf8,
  110.     0xf0, 0xf4, 0xe4, 0xe0, 0xe8, 0xec, 0xcc, 0xc8,
  111.     0xc0, 0xc4, 0xd4, 0xd0, 0xd8, 0xdc, 0x9c, 0x98,
  112.     0x90, 0x94, 0x84, 0x80, 0x88, 0x8c, 0xac, 0xa8,
  113.     0xa0, 0xa4, 0xb4, 0xb0, 0xb8, 0xbc, 0x3c, 0x38,
  114.     0x30, 0x34, 0x24, 0x20, 0x28, 0x2c, 0x0c, 0x08
  115.  
  116. 16 I    encoder 2 (d5-d0)
  117.  
  118.     The inputs aren't scrambled as they are on the 1 player
  119.         encoder
  120.  
  121. 17 I    DIP SW C6 (coin/cocktail settings)
  122.  
  123.         8  7  6 5 4  3 2 1
  124.                              coin switch 1
  125.         |  |  | | |  0 0 0   1 coin  2 credits
  126.         |  |  | | |  0 0 1   1 coin  3 credits
  127.         |  |  | | |  0 1 0   1 coin  5 credits
  128.         |  |  | | |  0 1 1   4 coins 5 credits
  129.         |  |  | | |  1 0 0   3 coins 4 credits
  130.         |  |  | | |  1 0 1   2 coins 3 credits
  131.         |  |  | | |  1 1 0   2 coins 1 credit
  132.         |  |  | | |  1 1 1   1 coin  1 credit
  133.         |  |  | | |
  134.         |  |  | | |          coin switch 2
  135.         |  |  0 0 0          1 coin  2 credits
  136.         |  |  0 0 1          1 coin  3 credits
  137.         |  |  0 1 0          1 coin  5 credits
  138.         |  |  0 1 1          4 coins 5 credits
  139.         |  |  1 0 0          3 coins 4 credits
  140.         |  |  1 0 1          2 coins 3 credits
  141.         |  |  1 1 0          2 coins 1 credit
  142.         |  |  1 1 1          1 coin  1 credit
  143.         |  |
  144.         |  0                 coin play
  145.         |  1                 free play
  146.         |
  147.         0                    normal
  148.         1                    cocktail
  149.  
  150. display list format: (4 byte opcodes)
  151.  
  152. +------+------+------+------+------+------+------+------+
  153. |DY07   DY06   DY05   DY04   DY03   DY02   DY01   DY00  | 0
  154. +------+------+------+------+------+------+------+------+
  155. |OPCD3  OPCD2  OPCD1  OPCD0  DY11   DY10   DY09   DY08  | 1 OPCD 1111 = ABBREV/
  156. +------+------+------+------+------+------+------+------+
  157. |DX07   DX06   DX05   DX04   DX03   DX02   DX01   DX00  | 2
  158. +------+------+------+------+------+------+------+------+
  159. |INTEN3 INTEN2 INTEN1 INTEN0 DX11   DX10   DX09   DX08  | 3
  160. +------+------+------+------+------+------+------+------+
  161.  
  162.     Draw relative vector       0x80      1000YYYY YYYYYYYY IIIIXXXX XXXXXXXX
  163.  
  164.     Draw relative vector
  165.     and load scale             0x90      1001YYYY YYYYYYYY SSSSXXXX XXXXXXXX
  166.  
  167.     Beam to absolute
  168.     screen position            0xA0      1010YYYY YYYYYYYY ----XXXX XXXXXXXX
  169.  
  170.     Halt                       0xB0      1011---- --------
  171.  
  172.     Jump to subroutine         0xC0      1100AAAA AAAAAAAA
  173.  
  174.     Return from subroutine     0xD0      1101---- --------
  175.  
  176.     Jump to new address        0xE0      1110AAAA AAAAAAAA
  177.  
  178.     Short vector draw          0xF0      1111YYYY IIIIXXXX
  179.  
  180.  
  181. Sound Z80 Memory Map
  182.  
  183. 0000 ROM
  184. 1000 RAM
  185.  
  186. 15 14 13 12 11 10
  187.             0           2k prom (K5)
  188.             1           2k prom (J5)
  189.          1              1k RAM  (K4,J4)
  190.  
  191. I/O (write-only)
  192.  
  193. 0,1             8912 (K3)
  194. 2,3            8912 (J3)
  195.  
  196.  
  197. I/O (read-only)
  198.  
  199. 0                       input port from main CPU.
  200.                         main CPU writing port generated INT
  201. Sound Commands:
  202.  
  203. 0 - reset sound CPU
  204. ***************************************************************************/
  205.  
  206. #include "driver.h"
  207. #include "vidhrdw/vector.h"
  208. #include "vidhrdw/avgdvg.h"
  209.  
  210.  
  211.  
  212. static unsigned char *nvram;
  213. static size_t nvram_size;
  214.  
  215. static void nvram_handler(void *file, int read_or_write)
  216. {
  217.     if (read_or_write)
  218.         osd_fwrite(file,nvram,nvram_size);
  219.     else
  220.     {
  221.         if (file)
  222.             osd_fread(file,nvram,nvram_size);
  223.         else
  224.             memset(nvram,0,nvram_size);
  225.     }
  226. }
  227.  
  228.  
  229. static void omegrace_init_machine(void)
  230. {
  231.     /* Omega Race expects the vector processor to be ready. */
  232.     avgdvg_reset_w (0, 0);
  233. }
  234.  
  235. static READ_HANDLER( omegrace_vg_go_r )
  236. {
  237.     avgdvg_go_w(0,0);
  238.     return 0;
  239. }
  240.  
  241. static READ_HANDLER( omegrace_watchdog_r )
  242. {
  243.     return 0;
  244. }
  245.  
  246. static READ_HANDLER( omegrace_vg_status_r )
  247. {
  248.     if (avgdvg_done())
  249.         return 0;
  250.     else
  251.         return 0x80;
  252. }
  253.  
  254. /*
  255.  * Encoder bit mappings
  256.  * The encoder is a 64 way switch, with the inputs scrambled
  257.  * on the input port (and shifted 2 bits to the left for the
  258.  * 1 player encoder
  259.  *
  260.  * 3 6 5 4 7 2 for encoder 1 (shifted two bits left..)
  261.  *
  262.  *
  263.  * 5 4 3 2 1 0 for encoder 2 (not shifted..)
  264.  */
  265.  
  266. static unsigned char spinnerTable[64] = {
  267.     0x00, 0x04, 0x14, 0x10, 0x18, 0x1c, 0x5c, 0x58,
  268.     0x50, 0x54, 0x44, 0x40, 0x48, 0x4c, 0x6c, 0x68,
  269.     0x60, 0x64, 0x74, 0x70, 0x78, 0x7c, 0xfc, 0xf8,
  270.     0xf0, 0xf4, 0xe4, 0xe0, 0xe8, 0xec, 0xcc, 0xc8,
  271.     0xc0, 0xc4, 0xd4, 0xd0, 0xd8, 0xdc, 0x9c, 0x98,
  272.     0x90, 0x94, 0x84, 0x80, 0x88, 0x8c, 0xac, 0xa8,
  273.     0xa0, 0xa4, 0xb4, 0xb0, 0xb8, 0xbc, 0x3c, 0x38,
  274.     0x30, 0x34, 0x24, 0x20, 0x28, 0x2c, 0x0c, 0x08 };
  275.  
  276.  
  277. READ_HANDLER( omegrace_spinner1_r )
  278. {
  279.     int res;
  280.     res=readinputport(4);
  281.  
  282.     return (spinnerTable[res&0x3f]);
  283. }
  284.  
  285. WRITE_HANDLER( omegrace_leds_w )
  286. {
  287.     /* bits 0 and 1 are coin counters */
  288.     coin_counter_w(0,data & 1);
  289.     coin_counter_w(1,data & 2);
  290.  
  291.     /* bits 2 to 5 are the start leds (4 and 5 cocktail only, not supported) */
  292.     osd_led_w(0,~data >> 2);
  293.     osd_led_w(1,~data >> 3);
  294.  
  295.     /* bit 6 flips screen (not supported) */
  296. }
  297.  
  298. WRITE_HANDLER( omegrace_soundlatch_w )
  299. {
  300.     soundlatch_w (offset, data);
  301.     cpu_cause_interrupt (1, 0xff);
  302. }
  303.  
  304. static struct MemoryReadAddress readmem[] =
  305. {
  306.     { 0x0000, 0x3fff, MRA_ROM },
  307.     { 0x4000, 0x4bff, MRA_RAM },
  308.     { 0x5c00, 0x5cff, MRA_RAM }, /* NVRAM */
  309.     { 0x8000, 0x8fff, MRA_RAM },
  310.     { 0x9000, 0x9fff, MRA_ROM }, /* vector rom */
  311.     { -1 }    /* end of table */
  312.  
  313.     /* 9000-9fff is ROM, hopefully there are no writes to it */
  314. };
  315.  
  316. static struct MemoryWriteAddress writemem[] =
  317. {
  318.     { 0x0000, 0x3fff, MWA_ROM }, /* Omega Race tries to write there! */
  319.     { 0x4000, 0x4bff, MWA_RAM },
  320.     { 0x5c00, 0x5cff, MWA_RAM, &nvram, &nvram_size }, /* NVRAM */
  321.     { 0x8000, 0x8fff, MWA_RAM, &vectorram, &vectorram_size }, /* vector ram */
  322.     { 0x9000, 0x9fff, MWA_ROM }, /* vector rom */
  323.     { -1 }    /* end of table */
  324. };
  325.  
  326.  
  327. static struct MemoryReadAddress sound_readmem[] =
  328. {
  329.     { 0x0000, 0x07ff, MRA_ROM },
  330.     { 0x1000, 0x13ff, MRA_RAM },
  331.     { -1 } /* end of table */
  332. };
  333.  
  334. static struct MemoryWriteAddress sound_writemem[] =
  335. {
  336.     { 0x0000, 0x07ff, MWA_ROM },
  337.     { 0x1000, 0x13ff, MWA_RAM },
  338.     { -1 } /* end of table */
  339. };
  340.  
  341.  
  342. static struct IOReadPort readport[] =
  343. {
  344.     { 0x08, 0x08, omegrace_vg_go_r },
  345.     { 0x09, 0x09, omegrace_watchdog_r },
  346.     { 0x0b, 0x0b, omegrace_vg_status_r }, /* vg_halt */
  347.     { 0x10, 0x10, input_port_0_r }, /* DIP SW C4 */
  348.     { 0x17, 0x17, input_port_1_r }, /* DIP SW C6 */
  349.     { 0x11, 0x11, input_port_2_r }, /* Player 1 input */
  350.     { 0x12, 0x12, input_port_3_r }, /* Player 2 input */
  351.     { 0x15, 0x15, omegrace_spinner1_r }, /* 1st controller */
  352.     { 0x16, 0x16, input_port_5_r }, /* 2nd controller (cocktail) */
  353.     { -1 }    /* end of table */
  354. };
  355.  
  356. static struct IOWritePort writeport[] =
  357. {
  358.     { 0x0a, 0x0a, avgdvg_reset_w },
  359.     { 0x13, 0x13, omegrace_leds_w }, /* coin counters, leds, flip screen */
  360.     { 0x14, 0x14, omegrace_soundlatch_w }, /* Sound command */
  361.     { -1 }    /* end of table */
  362. };
  363.  
  364. static struct IOReadPort sound_readport[] =
  365. {
  366.     { 0x00, 0x00, soundlatch_r },
  367.     { -1 }
  368. };
  369.  
  370. static struct IOWritePort sound_writeport[] =
  371. {
  372.     { 0x00, 0x00, AY8910_control_port_0_w },
  373.     { 0x01, 0x01, AY8910_write_port_0_w },
  374.     { 0x02, 0x02, AY8910_control_port_1_w },
  375.     { 0x03, 0x03, AY8910_write_port_1_w },
  376.     { -1 }  /* end of table */
  377. };
  378.  
  379. INPUT_PORTS_START( omegrace )
  380.     PORT_START /* SW0 */
  381.     PORT_DIPNAME( 0x03, 0x03, "1st Bonus Life" )
  382.     PORT_DIPSETTING (   0x00, "40k" )
  383.     PORT_DIPSETTING (   0x01, "50k" )
  384.     PORT_DIPSETTING (   0x02, "70k" )
  385.     PORT_DIPSETTING (   0x03, "100k" )
  386.     PORT_DIPNAME( 0x0c, 0x0c, "2nd & 3rd Bonus Life" )
  387.     PORT_DIPSETTING (   0x00, "150k 250k" )
  388.     PORT_DIPSETTING (   0x04, "250k 500k" )
  389.     PORT_DIPSETTING (   0x08, "500k 750k" )
  390.     PORT_DIPSETTING (   0x0c, "750k 1500k" )
  391.     PORT_DIPNAME( 0x30, 0x30, "Credit(s)/Ships" )
  392.     PORT_DIPSETTING (   0x00, "1C/2S 2C/4S" )
  393.     PORT_DIPSETTING (   0x10, "1C/2S 2C/5S" )
  394.     PORT_DIPSETTING (   0x20, "1C/3S 2C/6S" )
  395.     PORT_DIPSETTING (   0x30, "1C/3S 2C/7S" )
  396.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
  397.     PORT_DIPSETTING (   0x00, DEF_STR( Off ) )
  398.     PORT_DIPSETTING (   0x40, DEF_STR( On ) )
  399.     PORT_DIPNAME( 0x80, 0x40, DEF_STR( Unknown ) )
  400.     PORT_DIPSETTING (   0x00, DEF_STR( Off ) )
  401.     PORT_DIPSETTING (   0x80, DEF_STR( On ) )
  402.  
  403.     PORT_START /* SW1 */
  404.     PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) )
  405.     PORT_DIPSETTING (   0x06, DEF_STR( 2C_1C ) )
  406.     PORT_DIPSETTING (   0x07, DEF_STR( 1C_1C ) )
  407.     PORT_DIPSETTING (   0x03, DEF_STR( 4C_5C ) )
  408.     PORT_DIPSETTING (   0x04, DEF_STR( 3C_4C ) )
  409.     PORT_DIPSETTING (   0x05, DEF_STR( 2C_3C ) )
  410.     PORT_DIPSETTING (   0x00, DEF_STR( 1C_2C ) )
  411.     PORT_DIPSETTING (   0x01, DEF_STR( 1C_3C ) )
  412.     PORT_DIPSETTING (   0x02, DEF_STR( 1C_5C ) )
  413.     PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) )
  414.     PORT_DIPSETTING (   0x30, DEF_STR( 2C_1C ) )
  415.     PORT_DIPSETTING (   0x38, DEF_STR( 1C_1C ) )
  416.     PORT_DIPSETTING (   0x18, DEF_STR( 4C_5C ) )
  417.     PORT_DIPSETTING (   0x20, DEF_STR( 3C_4C ) )
  418.     PORT_DIPSETTING (   0x28, DEF_STR( 2C_3C ) )
  419.     PORT_DIPSETTING (   0x00, DEF_STR( 1C_2C ) )
  420.     PORT_DIPSETTING (   0x08, DEF_STR( 1C_3C ) )
  421.     PORT_DIPSETTING (   0x10, DEF_STR( 1C_5C ) )
  422.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Free_Play ) )
  423.     PORT_DIPSETTING (   0x00, DEF_STR( Off ) )
  424.     PORT_DIPSETTING (   0x40, DEF_STR( On ) )
  425.     PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
  426.     PORT_DIPSETTING (   0x00, DEF_STR( Upright ) )
  427.     PORT_DIPSETTING (   0x80, DEF_STR( Cocktail ) )
  428.  
  429.     PORT_START /* IN2 -port 0x11 */
  430.     PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
  431.     PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
  432.     PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
  433.     PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
  434.     PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_TILT )
  435.     PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
  436.     PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 )
  437.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  438.  
  439.     PORT_START /* IN3 - port 0x12 */
  440.     PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
  441.     PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
  442.     PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_START3 | IPF_COCKTAIL )
  443.     PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_START4 | IPF_COCKTAIL )
  444.     PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
  445.     PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  446.     PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_START1 )
  447.     PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_START2 )
  448.  
  449.     PORT_START /* IN4 - port 0x15 - spinner */
  450.     PORT_ANALOG(0x3f, 0x00, IPT_DIAL, 12, 10, 0, 0 )
  451.  
  452.     PORT_START /* IN5 - port 0x16 - second spinner */
  453.     PORT_ANALOG(0x3f, 0x00, IPT_DIAL | IPF_COCKTAIL, 12, 10, 0, 0 )
  454. INPUT_PORTS_END
  455.  
  456.  
  457.  
  458. static struct AY8910interface ay8910_interface =
  459. {
  460.     2,    /* 2 chips */
  461.     1500000,    /* 1.5 MHz */
  462.     { 25, 25 },
  463.     { 0 },
  464.     { 0 },
  465.     { 0 },
  466.     { 0 }
  467. };
  468.  
  469.  
  470.  
  471. static struct MachineDriver machine_driver_omegrace =
  472. {
  473.     /* basic machine hardware */
  474.     {
  475.         {
  476.             CPU_Z80,
  477.             3000000,    /* 3.0 MHz */
  478.             readmem,writemem,readport,writeport,
  479.             0,0, /* no vblank interrupt */
  480.             interrupt, 250 /* 250 Hz */
  481.         },
  482.         {
  483.             CPU_Z80 | CPU_AUDIO_CPU,
  484.             1500000,    /* 1.5 MHz */
  485.             sound_readmem,sound_writemem,sound_readport,sound_writeport,
  486.             0, 0, /* no vblank interrupt */
  487.             nmi_interrupt, 250 /* 250 Hz */
  488.         }
  489.     },
  490.     40, 0,    /* frames per second, vblank duration (vector game, so no vblank) */
  491.     1, /* the soundcpu is synchronized by the new timer code */
  492.  
  493.     omegrace_init_machine,
  494.  
  495.     /* video hardware */
  496.     400, 300, { 0, 1020, -10, 1010 },
  497.     0,
  498.     256,0,
  499.     avg_init_palette_white,
  500.  
  501.     VIDEO_TYPE_VECTOR,
  502.     0,
  503.     dvg_start,
  504.     dvg_stop,
  505.     vector_vh_screenrefresh,
  506.  
  507.     /* sound hardware */
  508.     0,0,0,0,
  509.     {
  510.         {
  511.             SOUND_AY8910,
  512.             &ay8910_interface
  513.         }
  514.     },
  515.  
  516.     nvram_handler
  517. };
  518.  
  519.  
  520. /***************************************************************************
  521.  
  522.   Game driver(s)
  523.  
  524. ***************************************************************************/
  525.  
  526. ROM_START( omegrace )
  527.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  528.     ROM_LOAD( "omega.m7",     0x0000, 0x1000, 0x0424d46e )
  529.     ROM_LOAD( "omega.l7",     0x1000, 0x1000, 0xedcd7a7d )
  530.     ROM_LOAD( "omega.k7",     0x2000, 0x1000, 0x6d10f197 )
  531.     ROM_LOAD( "omega.j7",     0x3000, 0x1000, 0x8e8d4b54 )
  532.     ROM_LOAD( "omega.e1",     0x9000, 0x0800, 0x1d0fdf3a )
  533.     ROM_LOAD( "omega.f1",     0x9800, 0x0800, 0xd44c0814 )
  534.  
  535.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for audio cpu */
  536.     ROM_LOAD( "sound.k5",     0x0000, 0x0800, 0x7d426017 )
  537. ROM_END
  538.  
  539.  
  540.  
  541. GAME( 1981, omegrace, 0, omegrace, omegrace, 0, ROT0, "Midway", "Omega Race" )
  542.  
  543.